/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Formulario.java
 *
 * Created on 18/10/2012, 12:19:25 AM
 */

package co.edu.unitecnologica.interfaz;

import java.util.List;
import javax.persistence.Query;
import javax.persistence.EntityManager;
/**
 *
 * @author osalcedo
 */
public abstract class Formulario extends javax.swing.JInternalFrame {

    Principal principal;
    protected EntityManager em;
    protected Query query;
    protected List lista;
    private int registroActual;
    private int registrosTotales;
    private int accion;
    
    //indicadores de acciones
    public static final int SIN_ACCION=0 ;
    public static final int ACCION_NUEVO=1;
    public static final int ACCION_EDITAR=2;
    public static final int ACCION_BORRAR=3;
    public static final int ACCION_BUSCAR=4;

    //control
    public abstract boolean insertarRegistro();
    public abstract boolean buscarRegistros();
    public abstract boolean editarRegistro();
    public abstract boolean borrarRegistro();    
    public abstract void cargarRegistros();
    
    //interfaz
    public abstract void limpiarCampos();
    public abstract void habilitarCampos(boolean v);
    public abstract void agregarItemsMenuOpciones();
    
    

    //navegacion
    public abstract void mostrarRegistro(int r);


    /** Creates new form Formulario */
    public Formulario(Principal p) {
        principal=p;
        em=principal.getAdmEntidades();
        initComponents();
        init();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        menuOpciones = new javax.swing.JMenu();

        menuOpciones.setText("Opciones");

        setClosable(true);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameActivated(evt);
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameClosing(evt);
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 394, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 279, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameActivated
        principal.setInfoFormulario(getTitle(), registroActual+1, registrosTotales);
        menuOpciones=principal.getJmOpciones();
        menuOpciones.removeAll();
        agregarItemsMenuOpciones();
    }//GEN-LAST:event_formInternalFrameActivated

    private void formInternalFrameClosing(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameClosing
        principal.setInfoFormulario("Formulario", 0, 0);
        menuOpciones.removeAll();
    }//GEN-LAST:event_formInternalFrameClosing

    /**
     * @return the registroActual
     */
    public int getRegistroActual() {
        return registroActual;
    }

    /**
     * @param registroActual the registroActual to set
     */
    public void setRegistroActual(int registroActual) {
        this.registroActual = registroActual;
    }

    /**
     * @return the registrosTotales
     */
    public int getRegistrosTotales() {
        return registrosTotales;
    }

    /**
     * @param registrosTotales the registrosTotales to set
     */
    public void setRegistrosTotales(int registrosTotales) {
        this.registrosTotales = registrosTotales;
    }

    public void primerRegistro(){
        if(registroActual>=0 && registroActual<registrosTotales){
            registroActual=0;
            mostrarRegistro(registroActual);
        }
    }

    public void ultimoRegistro(){
        if(registroActual>=0 && registroActual<registrosTotales){
            registroActual=registrosTotales-1;
            mostrarRegistro(registroActual);
        }
    }

    public void anteriorRegistro(){
        if(registroActual>0 && registroActual<registrosTotales){
            registroActual--;
            mostrarRegistro(registroActual);
        }
    }

    public void siguienteRegistro(){
        if(registroActual>=0 && registroActual<registrosTotales-1){
            registroActual++;
            mostrarRegistro(registroActual);
        }
    }
    
    public boolean guardarAccion(){
        switch (accion){
            case Formulario.ACCION_NUEVO:
                insertarRegistro();
                cargarRegistros();
                principal.setInfoFormulario(getTitle(), getRegistroActual()+1, getRegistrosTotales());
                init();
                accion=Formulario.SIN_ACCION;
                break;
            case Formulario.ACCION_EDITAR:
                editarRegistro();
                init();
                accion=Formulario.SIN_ACCION;
                break;
            case Formulario.ACCION_BUSCAR:
                buscarRegistros();
                principal.HabilitarBotonesControl(true);
                principal.habilitarGuardar(false);
                principal.habilitarCancelar(false);
                principal.setInfoFormulario(getTitle(), getRegistroActual()+1, getRegistrosTotales());
                accion=Formulario.SIN_ACCION;
                break;
            case Formulario.ACCION_BORRAR:
                borrarRegistro();
                cargarRegistros();
                principal.setInfoFormulario(getTitle(), getRegistroActual()+1, getRegistrosTotales());
                init();
                accion=Formulario.SIN_ACCION;
                break;
        }
        habilitarCampos(false);
        return true;
    }

    private void init() {
        accion=Formulario.SIN_ACCION;
        principal.HabilitarBotonesControl(false);
        principal.habilitarNuevoRegistro(true);
        principal.habilitarCargarRegistros(true);
        principal.habilitarBuscarRegistros(true);
    }
    
    public void nuevo(){
        accion=Formulario.ACCION_NUEVO;
        menuOpciones=principal.getJmOpciones();
        principal.HabilitarBotonesControl(false);
        principal.habilitarGuardar(true);
        principal.habilitarCancelar(true);
        habilitarCampos(true);
        limpiarCampos();
        
    }
    public void buscar(){
        accion=Formulario.ACCION_BUSCAR;
        principal.HabilitarBotonesControl(false);
        principal.habilitarGuardar(true);
        principal.habilitarCancelar(true);
        habilitarCampos(true);
        limpiarCampos();
    }
   
    public void editar(){
        accion=Formulario.ACCION_EDITAR;
        principal.HabilitarBotonesControl(false);
        principal.habilitarGuardar(true);
        principal.habilitarCancelar(true);
        habilitarCampos(true);
    }
    public void borrar(){
        accion=Formulario.ACCION_BORRAR;
        principal.HabilitarBotonesControl(false);
        principal.habilitarGuardar(true);
        principal.habilitarCancelar(true);
    }
    public void cancelar(){
        init();
        habilitarCampos(false);
    }
    public void cargar(){
        principal.HabilitarBotonesControl(true);
        principal.habilitarGuardar(false);
        principal.habilitarCancelar(false);
        cargarRegistros();
    }
    public void guardar(){
        guardarAccion();
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    protected javax.swing.JMenu menuOpciones;
    // End of variables declaration//GEN-END:variables

    /**
     * @return the accion
     */
    public int getAccion() {
        return accion;
    }

    /**
     * @param accion the accion to set
     */
    public void setAccion(int accion) {
        this.accion = accion;
    }

}
